<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>闭包</title>
</head>
<body>
    <script>
        /**
         * 闭包：函数A内包含函数B，函数B可以访问函数内的变量。嵌套关系。
         * 闭包的模式：函数式闭包和对象式闭包
         * 闭包的有点与缺点：延迟作用域链，延迟数据（既是优点又是缺点）
        */
       // 函数式闭包，函数中有函数
       function A(age) {
        return function () {
            return age + 10
        }
       }
       console.log(A(20)())
       // 对象式闭包：函数中有对象
       function f1(age) {
           return {
               age:age+18
           }
       }
       console.log(f1(32).age)
       // 闭包缓存数据
       function cacheData() {
           const num = parseInt(Math.random() * 10 + 1)
           return function () {
               return num
           }
       }
       const ff = cacheData()
       // 输出同一个整数
       console.log(ff())
       console.log(ff())
       console.log(ff())
       console.log(ff())
       console.log(ff())
       console.log(ff())
    </script>
</body>
</html>